Delphi code for getting/setting the SQL query

The code below assumes that a PrintJob is already open.

Calls used
  PEGetNTables,
  PEGetNthTableType,
  PESetNthTableLogOnInfo,
  PETestNthTableConnectivity,
  PEGetSQLQuery,
  PESetSQLQuery
  PEGetHandleString
Code
uses CRDelphi;

{Stringlists to store the LogOn information}
var
  sQuery : TStringList;

procedure GetSQLQuery;
var
  TableType       : PETableType;
  LogInfo         : PELogOnInfo;
  nTables, nTable : Smallint;
  hText           : hWnd;
  nTextLen        : smallint;
  pRptCurrent     : PChar;
begin
  TableType.StructSize := SizeOf(PETableType);
  LogInfo.StructSize := SizeOf(PELogOnInfo);

  {We must establish a Server connection before retrieving SQL Query}

  {Get # of Tables}
  nTables := PEGetNTables(PrintJob);
  if nTables = -1 then
    {Do Error Handler};

  {Loop through the tables}
  for nTable := 0 to (nTables - 1) do
  begin
    if not PEGetNthTableType(PrintJob, nTable, TableType) then
      {Do Error Handler};
    {Try to find a SQL table}
    if (TableType.DBType = PE_DT_SQL) or
       (TableType.DBType = PE_DT_SQL_STORED_PROCEDURE) then
    begin
      StrPCopy(@LogInfo.ServerName, 'SqlServerOne');
      StrPCopy(@LogInfo.UserID, 'James Bond');
      StrPCopy(@LogInfo.Password, '007');
      StrPCopy(@LogInfo.DatabaseName, 'pubs');
      {Set LogOnInfo, propagating across all tables}
      if not PESetNthTableLogOnInfo(PrintJob, nTable, LogInfo, True) then
        {Do Error Handler};

      {Test LogOn}
      if not PETestNthTableConnectivity(PrintJob, nTable) then
        {Do Error Handler};
      Break;
    end;
  end;

  {Get the SQL Query}
  nTextLen := 0;
  if PEGetSQLQuery(PrintJob, hText, nTextLen) then
  begin
    {Allocate memory for temporary PChar}
    pRptCurrent := StrAlloc(nTextLen);

    {Retrieve the Query from the handle}
    if (nTextLen > 1) then
    begin
      if not PEGetHandleString(hText, pRptCurrent, nTextLen) then
      begin
        StrDispose(pRptCurrent);
        {Do Error Handler};
      end;
      sQuery := TStringList.Create;
      sQuery.SetText(pRptCurrent);
    end;
    StrDispose(pRptCurrent);
  end;
end;


procedure SetSQLQuery;
begin
  {Send the Query}
  if not PESetSQLQuery(PrintJob, sQuery.GetText) then
  begin
    sQuery.Free;
    {Do Error Handler};
  end;
  {Free the Query StringList}
  sQuery.Free;
end; 


Seagate Software IMG Holdings, Inc.
http://www.seagatesoftware.com
Support services:
http://support.seagatesoftware.com